A software application can be delivered to an end user's device in a number of different ways. One conventional technique is to download the files which comprise the application over a network and then execute an installer to make the application ready for execution on the destination device. This downloading and installation process may be quite lengthy especially if the application is large, however once the application is installed, it is locally available and provides quick access to any physical resources of the device. There have been some improvements to this traditional technique, which try to eliminate the need for a separate installation process. These approaches are sometimes referred to as application virtualization and they typically aim to encapsulate the contents of the application in such a way that the application is ready for execution immediately after being downloaded to the device. While these techniques reduce the overall time taken to begin using the application by removing the need for installation, they still require a waiting period while the contents of the application are being downloaded.
Another way to deliver an application to an end user is through remote access, also sometimes referred to as application remoting. This approach executes the application on a remote server and therefore does not require the downloading of the application's contents (files) to the end user's device. Using this technique, only the graphical user interface (GUI) information (i.e. pixel data) is streamed over the network from the server to the end user device and any user input captured on the device is transmitted to the server. Remoting technologies can be utilized to provide entire remote desktops, such as those based on Virtual Desktop Infrastructure (VDI) and Desktop-as-a-Service (DAAS). In a conventional VDI or DAAS environment, a user is provisioned a virtual desktop with multiple applications and the user is allowed to access their virtual desktop over a remote network connection, such as a WAN connection. The virtual desktops are typically hosted on servers that reside in a data center of the enterprise (or a third-party service provider), and each host server may execute multiple virtual desktops. Users can utilize a client device to remotely log into their individual virtual desktop and all of the application execution takes place on the remote host server which is linked to the local client device over network, using a remote display protocol such as remote desktop protocol (RDP), PC-over-IP (PCoIP) protocol, virtual network computing (VNC) protocol, or the like. Using such a remote desktop protocol, the user can interact with applications of the virtual desktop, which are running on the remote host server, such that only the display (i.e., image data), keyboard, and mouse information is communicated with the local client device. A common implementation of this approach is to host multiple desktop operating system instances on a server hardware platform running a hypervisor.
Both forms of application delivery (remote access and download) have their advantages and shortcomings. For example, downloading and installing the application on the end user's device provides good performance and allows the application to utilize the physical resources (e.g. local storage) of the device, however it requires a tedious and often lengthy process of waiting for the application to download and going through the installation process. Conversely, application remoting allows the user to start using the application immediately, however it requires a network connection and often offers reduced performance when compared to local execution, particularly when the network connection is not optimal.